/*********************************************************************
* File: ICollisionHandler.h
*
* Collision detection and handling.
*********************************************************************/
#pragma once

namespace agents{namespace interfaces{
	/**
	* \class ICollisionHandler
	* \brief Collision detection and handling.
	*
	* Defines algorithms for collision detection and collision handling
	*
	* \author Instituto Superior Tecnico de Lisboa, Portugal
	* \author Technical University of Lisbon, Portugal
	* 
	* \author Agentes Autonomos e Sistemas Multiagente
	* \author Autonomous Agents and Multiagent Systems
	* 
	* \version	1.0
	* \date		2006/2007
	**/
	class ICollisionHandler
	{
	public:
		/**
		* \brief Detects collisions.
		* 
		* \return Whether a collision occured.
		**/
		virtual bool detectCollision() = 0;
		/**
		* \brief Handles collisions.
		**/
		virtual void handleCollision() = 0;
		// Bug 05 - Reset collision state - Start
		/**
		* \brief Resets the collision state.
		**/
		virtual void resetCollisionState() = 0;
		// Bug 05 - End
		/**
		* \brief Whether the agent is stuck.
		*
		* An agent gets stuck if the handle collision algorithm is unable to 
		* solve the collision. 
		**/
		virtual bool isStuck() = 0;
	};
}}
